home *** CD-ROM | disk | FTP | other *** search
-
- GLOB(3) UNIX Programmer's Manual GLOB(3)
-
- NNAAMMEE
- gglloobb, gglloobbffrreeee - generate pathnames matching a pattern
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<gglloobb..hh>>
-
- _i_n_t
- gglloobb(_c_o_n_s_t _c_h_a_r _*_p_a_t_t_e_r_n, _i_n_t _f_l_a_g_s,
- _c_o_n_s_t _i_n_t _(_*_e_r_r_f_u_n_c_)_(_c_o_n_s_t _c_h_a_r _*_, _i_n_t_), _g_l_o_b___t _*_p_g_l_o_b)
-
- _v_o_i_d
- gglloobbffrreeee(_g_l_o_b___t _*_p_g_l_o_b)
-
- DDEESSCCRRIIPPTTIIOONN
- The gglloobb() function is a pathname generator that implements the rules for
- file name pattern matching used by the shell.
-
- The include file _g_l_o_b_._h defines the structure type _g_l_o_b___t, which contains
- at least the following fields:
-
- typedef struct {
- int gl_pathc; /* count of total paths so far */
- int gl_matchc; /* count of paths matching pattern */
- int gl_offs; /* reserved at beginning of gl_pathv */
- int gl_flags; /* returned flags */
- char **gl_pathv; /* list of paths matching pattern */
- } glob_t;
-
- The argument _p_a_t_t_e_r_n is a pointer to a pathname pattern to be expanded.
- The gglloobb() argument matches all accessible pathnames against the pattern
- and creates a list of the pathnames that match. In order to have access
- to a pathname, gglloobb() requires search permission on every component of a
- path except the last and read permission on each directory of any file-
- name component of _p_a_t_t_e_r_n that contains any of the special characters
- `*', `?' or `['.
-
- The gglloobb() argument stores the number of matched pathnames into the
- _g_l___p_a_t_h_c field, and a pointer to a list of pointers to pathnames into the
- _g_l___p_a_t_h_v field. The first pointer after the last pathname is NULL. If
- the pattern does not match any pathnames, the returned number of matched
- paths is set to zero.
-
- It is the caller's responsibility to create the structure pointed to by
- _p_g_l_o_b. The gglloobb() function allocates other space as needed, including the
- memory pointed to by _g_l___p_a_t_h_v.
-
- The argument _f_l_a_g_s is used to modify the behavior of gglloobb(). The value
- of _f_l_a_g_s is the bitwise inclusive OR of any of the following values de-
- fined in _g_l_o_b_._h:
-
- GLOB_APPEND Append pathnames generated to the ones from a previous
- call (or calls) to gglloobb(). The value of _g_l___p_a_t_h_c will
- be the total matches found by this call and the previous
- call(s). The pathnames are appended to, not merged with
- the pathnames returned by the previous call(s). Between
- calls, the caller must not change the setting of the
- GLOB_DOOFFS flag, nor change the value of _g_l___o_f_f_s when
- GLOB_DOOFFS is set, nor (obviously) call gglloobbffrreeee() for
- _p_g_l_o_b.
-
- GLOB_DOOFFS Make use of the _g_l___o_f_f_s field. If this flag is set,
- _g_l___o_f_f_s is used to specify how many NULL pointers to
- prepend to the beginning of the _g_l___p_a_t_h_v field. In oth-
- er words, _g_l___p_a_t_h_v will point to _g_l___o_f_f_s NULL pointers,
- followed by _g_l___p_a_t_h_c pathname pointers, followed by a
- NULL pointer.
-
- GLOB_ERR Causes gglloobb() to return when it encounters a directory
- that it cannot open or read. Ordinarily, gglloobb() contin-
- ues to find matches.
-
- GLOB_MARK Each pathname that is a directory that matches _p_a_t_t_e_r_n
- has a slash appended.
-
- GLOB_NOCHECK If _p_a_t_t_e_r_n does not match any pathname, then gglloobb() re-
- turns a list consisting of only _p_a_t_t_e_r_n, with the number
- of total pathnames is set to 1, and the number of
- matched pathnames set to 0. If GLOB_QUOTE is set, its
- effect is present in the pattern returned.
-
- GLOB_NOSORT By default, the pathnames are sorted in ascending ASCII
- order; this flag prevents that sorting (speeding up
- gglloobb()).
-
- The following values may also be included in _f_l_a_g_s, however, they are
- non-standard extensions to IEEE Std1003.2 (``POSIX'').
-
- GLOB_ALTDIRFUNC The following additional fields in the pglob structure
- have been initialized with alternate functions for glob
- to use to open, read, and close directories and to get
- stat information on names found in those directories.
-
- void *(*gl_opendir)(const char * name);
- struct dirent *(*gl_readdir)(void *);
- void (*gl_closedir)(void *);
- int (*gl_lstat)(const char *name, struct stat *st);
- int (*gl_stat)(const char *name, struct stat *st);
-
- This extension is provided to allow programs such as re-
- store(8) to provide globbing from directories stored on
- tape.
-
- GLOB_BRACE Pre-process the pattern string to expand `{pat,pat,...}'
- strings like csh(1.)The pattern `{}' is left unexpanded
- for historical reasons (Csh(1) does the same thing to
- ease typing of find(1) patterns).
-
- GLOB_MAGCHAR Set by the gglloobb() function if the pattern included glob-
- bing characters. See the description of the usage of
- the _g_l___m_a_t_c_h_c structure member for more details.
-
- GLOB_NOMAGIC Is the same as GLOB_NOCHECK but it only appends the
- _p_a_t_t_e_r_n if it does not contain any of the special char-
- acters ``*'', ``?'' or ``[''. GLOB_NOMAGIC is provided
- to simplify implementing the historic csh(1) globbing
- behavior and should probably not be used anywhere else.
-
- GLOB_QUOTE Use the backslash (`\') character for quoting: every oc-
- currence of a backslash followed by a character in the
- pattern is replaced by that character, avoiding any spe-
- cial interpretation of the character.
-
- GLOB_TILDE Expand patterns that start with `~' to user name home
- directories.
-
- If, during the search, a directory is encountered that cannot be opened
- or read and _e_r_r_f_u_n_c is non-NULL, gglloobb() calls _(_*_e_r_r_f_u_n_c_)_(_p_a_t_h_, _e_r_r_n_o_).
- This may be unintuitive: a pattern like `*/Makefile' will try to stat(2)
- `foo/Makefile' even if `foo' is not a directory, resulting in a call to
- _e_r_r_f_u_n_c. The error routine can suppress this action by testing for ENOENT
- and ENOTDIR; however, the GLOB_ERR flag will still cause an immediate re-
- turn when this happens.
-
- If _e_r_r_f_u_n_c returns non-zero, gglloobb() stops the scan and returns GLOB_ABEND
- after setting _g_l___p_a_t_h_c and _g_l___p_a_t_h_v to reflect any paths already matched.
- This also happens if an error is encountered and GLOB_ERR is set in
- _f_l_a_g_s, regardless of the return value of _e_r_r_f_u_n_c, if called. If GLOB_ERR
- is not set and either _e_r_r_f_u_n_c is NULL or _e_r_r_f_u_n_c returns zero, the error
- is ignored.
-
- The gglloobbffrreeee() function frees any space associated with _p_g_l_o_b from a pre-
- vious call(s) to gglloobb().
-
- RREETTUURRNN VVAALLUUEESS
- On successful completion, gglloobb() returns zero. In addition the fields of
- _p_g_l_o_b contain the values described below:
-
- _g_l___p_a_t_h_c contains the total number of matched pathnames so far.
- This includes other matches from previous invocations of
- gglloobb() if GLOB_APPEND was specified.
-
- _g_l___m_a_t_c_h_c contains the number of matched pathnames in the current in-
- vocation of gglloobb().
-
- _g_l___f_l_a_g_s contains a copy of the _f_l_a_g_s parameter with the bit
- GLOB_MAGCHAR set if _p_a_t_t_e_r_n contained any of the special
- characters ``*'', ``?'' or ``['', cleared if not.
-
- _g_l___p_a_t_h_v contains a pointer to a NULL-terminated list of matched
- pathnames. However, if _g_l___p_a_t_h_c is zero, the contents of
- _g_l___p_a_t_h_v are undefined.
-
- If gglloobb() terminates due to an error, it sets _e_r_r_n_o and returns one of
- the following non-zero constants, which are defined in the include file
- <_g_l_o_b_._h>:
-
- GLOB_NOSPACE An attempt to allocate memory failed.
-
- GLOB_ABEND The scan was stopped because an error was encountered and
- either GLOB_ERR was set or _(_*_e_r_r_f_u_n_c_)_(_) returned non-zero.
-
- The arguments _p_g_l_o_b_-_>_g_l___p_a_t_h_c and _p_g_l_o_b_-_>_g_l___p_a_t_h_v are still set as speci-
- fied above.
-
- EEXXAAMMPPLLEE
- A rough equivalent of `ls -l *.c *.h' can be obtained with the following
- code:
-
- glob_t g;
-
- g.gl_offs = 2;
- glob("*.c", GLOB_DOOFFS, NULL, &g);
- glob("*.h", GLOB_DOOFFS | GLOB_APPEND, NULL, &g);
- g.gl_pathv[0] = "ls";
- g.gl_pathv[1] = "-l";
- execvp("ls", g.gl_pathv);
-
- SSEEEE AALLSSOO
- sh(1), fnmatch(3), regexp(3)
-
- SSTTAANNDDAARRDDSS
- The gglloobb() function is expected to be IEEE Std1003.2 (``POSIX'') compati-
- ble with the exception that the flags GLOB_ALTDIRFUNC, GLOB_BRACE
- GLOB_MAGCHAR, GLOB_NOMAGIC, GLOB_QUOTE, and GLOB_TILDE, and the fields
- _g_l___m_a_t_c_h_c and _g_l___f_l_a_g_s should not be used by applications striving for
- strict POSIX conformance.
-
- HHIISSTTOORRYY
- The gglloobb() and gglloobbffrreeee() functions first appeared in 4.4BSD.
-
- BBUUGGSS
- Patterns longer than MAXPATHLEN may cause unchecked errors.
-
- The gglloobb() function may fail and set _e_r_r_n_o for any of the errors speci-
- fied for the library routines stat(2), closedir(3), opendir(3),
- readdir(3), malloc(3), and free(3).
-
- BSD Experimental April 16, 1994 4
-